package cn.woniu.util;

import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.MACSigner;
import com.nimbusds.jose.crypto.MACVerifier;

import java.util.HashMap;
import java.util.Map;

/**
 * 生成jwt工具类
 * 1:创建jwt
 * 2:校验jwt是否合法
 * 3:返回载荷部分
 */
public class JWTUtil {
    /**
     * 生成jwt工具类
     * @param map 传入一个map集合
     * @return 返回token
     */

private  static String key = "qwerty11011022251535121256421432165425132138";

    public static String createJWT(String username) throws Exception{
         //第一部分:头部
            JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.HS256)
                    .type(JOSEObjectType.JWT).build();
            Map map = new HashMap<>();
            map.put("username",username);
            Payload payload = new Payload(map);
            JWSObject jwsObject = new JWSObject(header,payload);
            JWSSigner single = new MACSigner(key);
            //根据秘钥把jwsObject 加密
            jwsObject.sign(single);
            //把jwsObject序列化成一个字符串
            return jwsObject.serialize();
    }

    /**
     * 校验token是否合法
     * @param token 传入token
     * @return 返回校验后的结果
     */
    public static boolean verify(String token) throws Exception{
            return JWSObject
                    .parse(token)
                    .verify(
                            new MACVerifier(key)
                    );
    }

    /**
     * 将token转为实体
     * @param token 传入荷载
     * @return 返回实体
     */
    public static Map getPayload(String token) throws Exception{
         return JWSObject
                    .parse(token)
                    .getPayload()
                    .toJSONObject();
    }

}
